JavaScript型別分成這幾大類:
問題一:物件的無序群集 (unordered collection)是什麼?
問題二:什麼是Set物件、Map物件、RegExp型別、Date型別、Error及子型別?
物件型別是可變的 (mutable);原始型別是不可變的 (immutable)。
問題三、在JavaScript中,定義Math物件支援數學運算,是什麼?
在初學習JavaScript時,一開始比較常用到Math.floor (無條件捨去) 以及Math.random (隨機取一個小於一的數字)的方法。
console.log(Math.floor(5.95));
// Expected output: 5
console.log(Math.random()); //Expected output: 0.6088877637710861
練習寫出樂透機時常使用Math.floor加上Math.random來取一個1-50之間的隨機整數:
let answer = Math.floor(Math.random() * 49) + 1; // 隨機產生一個1-50之間的整數
console.log(answer);
問題四、四捨五入為何盡量不要使用toFixed?
四捨五入,建議使用Math.round、Math.ceil或是Math.floor,會比toFixed來的正確。
Math.round(四捨五入):
console.log(Math.round(-20.51)); //Expected output:21
console.log(Math.round(-20.5)); //Expected output:20
console.log(Math.round(20.5)); //Expected output:21
console.log(Math.round(20.49)); //Expected output:20
因為toFixed使用的是銀行家捨入法 ,並非一般人認知的四捨五入。
銀行家捨入法口訣:四捨六入五考慮、五後非零就進一、五後為零看奇偶、五前為偶應捨去、五前為奇要進一。
使用toFixed正常狀況:
const answer = 12345.6789
answer.toFixed(); //Expected output: '12346' 型別為字串
answer.toFixed(1); //Expected output: '12345.7'
answer.toFixed(2); //Expected output: '12345.68'
toFixed不正常狀況:
const answer = 0.015;
answer.toFixed(2); //不正常,小數點後第2位四捨五入 結果為 0.01
const answer6 = 0.0155;
console.log(answer6.toFixed(3)); //不正常,小數點後第3位四捨五入 結果為 0.015
Reference:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
JS toFixed(银行家舍入法)及其缺陷和解决方法_js的tofix 银行家算法_普通网友的博客-CSDN博客